package main

import (
	//给包取别名，在包前定义一个变量即为包的别名
	//util "../utils"
	"fmt"
	. "fmt"  // 如果在包前面加点(.),那么在使用这个包的方法是可以不写包名，如Println()
	"study.com/base/utils"
)
//var name string = "haha"  // 可行
//var name = "haha"  // 可行
//name := "haha"  // 不可行，相当于var name string    name = ”哈哈“  赋值语句不能在函数体外
func main() {
	// 定义变量方式和其他语言不同,声明变量使用var
	// 声明变量是直接赋值，可省略类型
	// var i int = 5  // 不赋值为默认值0
	// var j bool = true  // 布尔类型为小写,不写默认为false
	// string 类型不赋值默认为空字符串""
	// 相同类型可在一行定义(多变量声明)
	// var x, y int  // x, y 都为int类型

	// var (
	// 	i int
	// 	j string
	// 	k bool
	// )
	// fmt.Println("i =", i, "j =", j, "k =", k)

	// 类型推导方式
	// var i = a  // a为整数，i就是int；a为字符串，i就是string...

	// 省略var
	// a := 10
	// b := "go"
	// fmt.Println(a, b)
	// 平行赋值(多变量声明)
	a, b := 10, "go"
	//fmt.Println(a, b)
	// 格式化输出
	fmt.Println("a的结果是", a, "b的结果是", b)
	//fmt.Println(a^5)  // 位运算

	// 常量
	const c = iota  // iota生成枚举值，第一个为0，之后一次加1
	fmt.Println(c)

	const (
		d = iota
		e = iota
		f = iota
	)
	fmt.Println(d, e, f)
	//fmt.Println(13&7)

	s := "hello"
	ss := []rune(s)  // 字符串不可变，用[]rune()转换
	ss[0] = 'c'
	s2 := string(ss)
	fmt.Printf("%s\n", s2)
	Printf(utils.Name)
	//fmt.Printf(name)
}
